/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package escom.libreria.info.login.sistema.jsf;






import com.escom.administracion.dao.AlumnoDAO;
import com.escom.administracion.dao.UsuarioAdministradorDAO;
import com.escom.administracion.dao.UsuariosDAO;
import com.escom.administracionperfiles.constants.Constants;
import com.escom.administracionperfiles.correo.ProcesoJMailDAO;
import com.escom.administracionperfiles.hbm.dto.Alumno;
import com.escom.administracionperfiles.hbm.dto.UsuarioAdministrador;
import com.escom.administracionperfiles.hbm.dto.Usuarios;
import com.escom.cliente.exception.DAOException;
import com.escom.info.scanner.jsf.util.JsfUtil;
import java.io.Serializable;


import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;


import javax.servlet.http.HttpServletRequest;




public class SistemaController implements Serializable ,SistemaControllerDAO {
    
    private String correo,password;//cliente 
    private String usuarioAdmin,passwordAdmin;//administradores
    private String menssageBienvenida;
    private UsuariosDAO usarioDAO; 
    private AlumnoDAO alumnoDAO;
    private Alumno alumno;
    private Usuarios usuario;
    private ProcesoJMailDAO correoDAO;
    private UsuarioAdministradorDAO  usuarioAdministradorDAO;
    private UsuarioAdministrador usaAdministrador;

    



    @PostConstruct
    public void init() {

        System.out.println("ENTRE");
        try{
            if((getCorreo()!=null && !getCorreo().trim().equals(""))){
                
            }
        }catch(Exception e){
        
        }
    }

    

    public SistemaController() {}

    


 private void inicializarCampos(){
     setPassword("");
     setPasswordAdmin("");
     setCorreo("");
     setUsuarioAdmin("");
 }
  public String loginAcces(){
      String ipRemota = null;
        try {
            usaAdministrador=null;
            alumno=alumnoDAO.findAlumnoByBoletaAndPassword(Integer.parseInt(correo),password);
            if(alumno==null)
            {
                JsfUtil.addErrorMessage("Error alumno no encontrado,favor de verificar sus datos");
                return null;
            }else
            {
              ipRemota=getDireccionIP();
             usuario=usarioDAO.findDevice(ipRemota);

              if(usuario==null)
              {

               JsfUtil.addErrorMessage("ACCESO DENEGADO A LA IP:"+ipRemota);
               return null;
              }
             inicializarCampos();
             menssageBienvenida="BIENVENIDO "+alumno.getAppaterno()+" "+alumno.getApmaterno()+"  "+alumno.getNombre();
            /*ALUMNO AUTORIZADO EN ESTE PUNTO*/
             return "/servicio/List";
         }//else
           
       } catch (DAOException ex) {
            Logger.getLogger(SistemaController.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
  }


  public boolean getaccederAdministradorAlumnosAndDocente()
  {
      String actividad="";
      if(usaAdministrador!=null){
         actividad=usaAdministrador.getActividad();
         if((actividad.equals(Constants.ADMINISTRACION_DE_ALUMNOS) ||
            actividad.equals(Constants.ADMINISTRACION_DE_PERSONAL) ||
            actividad.equals(Constants.ADMINISTRACION_DE_SISTEMA)))

           return true; 
         }

      return false;
  }

  public boolean isAlumnoLogeado(){
     return alumno!=null? true:false;
  }

  public boolean getaccederAdministradorDispositivosAndDominio()
  {
        String actividad="";
       if(usaAdministrador!=null){
           actividad=usaAdministrador.getActividad();
         if(actividad.equals(Constants.ADMINISTRACION_DE_ALUMNOS)
             || actividad.equals(Constants.ADMINISTRACION_DE_DOMINIOS)
             || actividad.equals(Constants.ADMINISTRACION_DE_SISTEMA))
           return true;
      }
      return false;
  }
  public boolean getaccederAdministradorSistema(){
       String actividad="";
       if(usaAdministrador!=null){
           actividad=usaAdministrador.getActividad();
         if(actividad.equals(Constants.ADMINISTRACION_DE_SISTEMA))
           return true;
      }
       return false;
  }

  public String cerrarCession(){
     try{
        HttpServletRequest respuesta = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        respuesta.getSession(false).invalidate();
      }catch(Exception e){
          e.printStackTrace();
      }
      JsfUtil.addSuccessMessage("Sesion Cerrada Satisfactoriamente");
      return "index";
  }

  @Override
  public String getDireccionIP(){
      String ipRemota;
      HttpServletRequest respuesta = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
      ipRemota = respuesta.getRemoteAddr();
      return ipRemota;
  }

  public String accesoAdministrador(){
        try {
            if(usuarioAdmin!=null && !usuarioAdmin.equals("") && passwordAdmin!=null && !passwordAdmin.equals(""))
               alumno=null;
               usaAdministrador = usuarioAdministradorDAO.findUsuarioAndPassword(usuarioAdmin, passwordAdmin);
            if(usaAdministrador==null){
                JsfUtil.addErrorMessage("Error usuario administrativo no registrado");
                return null;
            }else{
                  inicializarCampos();
                 menssageBienvenida="BIENVENIDO "+usaAdministrador.getNombre();
            }
        } catch (DAOException ex) {
            Logger.getLogger(SistemaController.class.getName()).log(Level.SEVERE, null, ex);
        }

        return null;
  }

  public String olvideContrasenia(){
        try{
            Alumno a = alumnoDAO.find(Integer.parseInt(correo));
            if(a!=null)
            {
               correoDAO.enviarCorreoOlvideDatos(a.getCorreo(),String.valueOf( a.getBoleta()),a.getContrasenia());
               JsfUtil.addSuccessMessage("Correo enviado Exitosamente");
            }else
            JsfUtil.addErrorMessage("Alumno no registrado");
        } catch (DAOException ex) {
            Logger.getLogger(SistemaController.class.getName()).log(Level.SEVERE, null, ex);
            JsfUtil.addErrorMessage("Error al enviar correo electronico");
        }

      return "/login/Create";
  }

  public ProcesoJMailDAO getCorreoDAO() {
        return correoDAO;
    }

    public void setCorreoDAO(ProcesoJMailDAO correoDAO) {
        this.correoDAO = correoDAO;
    }


    public Alumno getAlumno() {
        return alumno;
    }

    public void setAlumno(Alumno alumno) {
        this.alumno = alumno;
    }
/*METODO QUE VA COMPARTIRSE COMO BEAN DE SESSION*/
    @Override
    public Usuarios getUsuarios() {
        if(usuario==null){
            try
            {
                usuario = usarioDAO.findDevice(getDireccionIP());
            } catch (DAOException ex) {
                Logger.getLogger(SistemaController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return usuario;
    }

    public void setUsuario(Usuarios usuario) {
        this.usuario = usuario;
    }


    public UsuariosDAO getUsarioDAO() {
        return usarioDAO;
    }

    public void setUsarioDAO(UsuariosDAO usarioDAO) {
        this.usarioDAO = usarioDAO;
    }





   /* public String getBandera() {
        return bandera;
    }
*/
    public AlumnoDAO getAlumnoDAO() {
        return alumnoDAO;
    }

    public void setAlumnoDAO(AlumnoDAO alumnoDAO) {
        this.alumnoDAO = alumnoDAO;
    }



public UsuarioAdministradorDAO getUsuarioAdministradorDAO() {
        return usuarioAdministradorDAO;
    }

    public void setUsuarioAdministradorDAO(UsuarioAdministradorDAO usuarioAdministradorDAO) {
        this.usuarioAdministradorDAO = usuarioAdministradorDAO;
    }

  /*  public void setBandera(String bandera) {
        this.bandera = bandera;
    }
   *
   */

    public String getPasswordAdmin() {
        return passwordAdmin;
    }

    public void setPasswordAdmin(String passwordAdmin) {
        this.passwordAdmin = passwordAdmin;
    }

    public String getUsuarioAdmin() {
        return usuarioAdmin;
    }

    public void setUsuarioAdmin(String usuarioAdmin) {
        this.usuarioAdmin = usuarioAdmin;
    }




    public String getMenssageBienvenida() {

        if(menssageBienvenida==null)
            return "";

        return  menssageBienvenida.toUpperCase();
    }
    public String getCorreo() {
        return correo;
    }

    public void setCorreo(String correo) {
        this.correo = correo;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    }

